﻿/*************************************************
  * 描述：用来生成不同码类型的公共类
  *
  * File：codeimagegenerator.h
  * Author：gaomaolong@mozihealthcare.cn
  * Date：2025-09-22
  * Update：
  * ************************************************/
#ifndef CODEIMAGEGENERATOR_H
#define CODEIMAGEGENERATOR_H

#include <common/export.h>

enum class BarcodeType : uint8_t;
class CodeImageConfig;
class CodeImageGeneratorPrivate;
class QImage;

class CXI_COMMON_EXPORT CodeImageGenerator
{
public:
	CodeImageGenerator();

	/**
	 * 构造函数
	 * @param config 生成码的配置
	 */
	explicit CodeImageGenerator(const CodeImageConfig& config);

	~CodeImageGenerator();

	/**
	 * 如果对象已经设置过config，那么会复用已存在config，否则走默认config，根据传入数据自动选择生成码的类型
	 * @param data 要生成码的数据
	 * @return QImage 生成的码图像
	 */
	QImage generate(const QString& data);

	/**
	 * 使用于创建对象调用，生成码
	 * @param data 数据
	 * @param config 配置
	 * @return QImage图像
	 */
	QImage generate(const QString& data, const CodeImageConfig& config);

	/**
	 * 设置码的配置参数
	 * @param config 配置参数
	 */
	void setCodeImageConfig(const CodeImageConfig& config);

	/**
	 * 创建二维码静态方法，只可指定数据，走默认的配置
	 * @param data 要生成二维码的数据
	 * @return QImage 生成的二维码图像
	 */
	static QImage createQRCode(const QString& data);

	/**
	* 创建条形码静态方法，只可指定数据，走默认的配置
	* @param data 要生成条形码的数据
	* @return QImage 生成的条形码图像
	*/
	static QImage createBarcode(const QString& data);

	/**
	 * 获取支持的格式
	 * @return
	 */
	static QList<BarcodeType> getSupportedFormats();

private:
	Q_DECLARE_PRIVATE(CodeImageGenerator)
	QScopedPointer<CodeImageGeneratorPrivate> d_ptr;
};

#endif// CODEIMAGEGENERATOR_H
